/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package simulateurs.view.modelView;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.net.URL;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
import simulateurs.model.monde.Balle;
import simulateurs.model.monde.But;
import simulateurs.model.monde.Equipe;
import simulateurs.model.monde.Robot;
import simulateurs.view.I_View;
import simulateurs.view.View;
import simulateurs.view.controllersView.RoundButton;

/**
 *
 * @author Lunesco
 */
public class ModelPanelView extends JPanel implements I_View {
    private View parentView=null;
    private ArrayList<Balle> listeBalles=null;
    private ArrayList<Equipe> listeEquipes=null;
    private ArrayList<But> listeButs=null;
    private ArrayList<RoundButton> listeCercles=null;
    private ArrayList<RoundButton> listeB=null;
	private JLabel timerLabel=new JLabel("0:0");
			
    public ModelPanelView(View parentView){
        this.parentView=parentView;
        this.listeBalles=this.parentView.getModel().getArene().getListeBalles();
        this.listeEquipes=this.parentView.getModel().getArene().getListeEquipes();
        this.listeButs=this.parentView.getModel().getArene().getListeButs();
        initModelPanel();
    }
    
    private void initModelPanel(){
		this.setSize((int)this.parentView.getModel().getArene().getLargeur(), (int)this.parentView.getModel().getArene().getHauteur());
        this.setBackground(new Color(0x00B2BF));
		
		this.listeCercles=new ArrayList<>();
		this.listeB=new ArrayList<>();
		
		timerLabel.setForeground(Color.WHITE);
		timerLabel.setFont(new Font("Tahoma", Font.BOLD, 20));
		timerLabel.setLocation(550, 0);
		timerLabel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
		timerLabel.setText(timerLabel.getText()+" / "+tempsLimiteToString(this.parentView.getModel().getArene().getTempsLimite()));
		this.add(timerLabel);
		
		for(int i=0; i<this.listeBalles.size(); i++){
            Balle b=this.listeBalles.get(i);
            RoundButton rb=new RoundButton("",b.getCentre().getAbscisse(),
                    b.getCentre().getOrdonnee(),
                    b.getRayon() * 2);
            rb.setBackground(b.getCouleur());
            rb.setForeground(new Color(0xFFFFFFFF-b.getCouleur().getRGB()));
            this.listeCercles.add(rb);
            this.add(rb);
        }
        for(int i=0; i<this.listeEquipes.size(); i++){
            Equipe e=this.listeEquipes.get(i);
            for(int j=0; j<e.getListeRobots().size(); j++){
                Robot r=e.getListeRobots().get(j);
                RoundButton rb=new RoundButton("",r.getCentre().getAbscisse(),
                        r.getCentre().getOrdonnee(),
                        r.getRayon() * 2);
                rb.setBackground(r.getCouleur());
                rb.setForeground(new Color(0xFFFFFFFF-r.getCouleur().getRGB()));
                this.listeCercles.add(rb);
                this.add(rb);
            }
        }
		for(int i=0; i<this.listeButs.size(); i++){
			But but=this.listeButs.get(i);
			RoundButton rb=new RoundButton("", but.getCentre().getAbscisse(),
                     but.getCentre().getOrdonnee(),
                    //this.parentView.getModel().getArene().getHauteur()/10);
                                but.getRayon()*2);
			rb.setBackground(but.getCouleur());
            rb.setForeground(new Color(0xFFFFFFFF-but.getCouleur().getRGB()));
			listeB.add(rb);
            this.add(rb);
		}
    }
    
	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		URL field1=getClass().getResource("field1.jpg");
		URL field2=getClass().getResource("field2.jpg");
		URL pool=getClass().getResource("pool.jpg");
		ImageIcon icon = new ImageIcon(field1);
		int x = 0;
		int y = 0;
		while (!(x > getSize().width && y > getSize().height)) {
			g.drawImage(icon.getImage(), x, y, this);
			if (x > getSize().width) {
				x = 0;
				y += icon.getIconHeight();
			}
			else x += icon.getIconWidth();
		}
	}
	
    @Override
    public void repeindre() {
        int i;
        for(i=0; i<this.listeBalles.size(); i++){
            Balle b=this.listeBalles.get(i);
            RoundButton rb=this.listeCercles.get(i);
            rb.setLocation((int)(b.getCentre().getAbscisse()-b.getRayon()), (int)(b.getCentre().getOrdonnee()-b.getRayon()));
            if(!b.isRamassable()){
                rb.setBackground(new Color((0x00FFFFFF & rb.getBackground().getRGB()), true));
                rb.setForeground(new Color((0x00FFFFFF & rb.getForeground().getRGB()), true));
            }
        }
        for(int j=0; j<this.listeEquipes.size(); j++){
            Equipe e=this.listeEquipes.get(j);
            for(int k=0;k<e.getListeRobots().size() && i<this.listeCercles.size();k++){
                Robot r=e.getListeRobots().get(k);
				RoundButton rb=this.listeCercles.get(i);
                rb.setLocation((int)(r.getCentre().getAbscisse()-r.getRayon()),(int)(r.getCentre().getOrdonnee()-r.getRayon()));
                if(r.hasBalle()){
					rb.setBorder(new LineBorder(r.getBalle().getCouleur(), rb.getWidth()/4));
				}
				else{
					rb.setBorder(null);
				}
				i++;
            }
        }
        
        // il manque 10 a la position du bouton
        //System.out.println("La position de la balle : " + this.listeButs.get(0).getCentre().getAbscisse() + "," + this.listeButs.get(0).getCentre().getOrdonnee());
	//System.out.println("La position du bouton : " + listeB.get(0).getLocation().getX() + "," + listeB.get(0).getLocation().getY());
		
        for(int m=0; m<this.listeButs.size(); m++){
			But b=this.listeButs.get(m);
			RoundButton rb=listeB.get(m);
			rb.setLocation((int)(b.getCentre().getAbscisse()-b.getRayon()), (int)(b.getCentre().getOrdonnee()-b.getRayon()));
		//rb.setLocation(0,0);
                //rb.setLocation((int)(0-(b.getRayon()*2)), (int)(0-(b.getRayon()*2)));

        }
		if(this.parentView.getModel().getArene().getTimer().getElapsedTime()>=this.parentView.getModel().getArene().getTempsLimite() && this.parentView.getModel().getArene().getTempsLimite()!=0)this.parentView.getButtonsPanel().performStopper();
		if(!this.parentView.getButtonsPanel().getDemarrer().isEnabled() && !this.parentView.getButtonsPanel().isPauseClicked())this.timerLabel.setText(tempsPasse()+" / "+tempsLimiteToString(this.parentView.getModel().getArene().getTempsLimite()));
		
    }
	
	private String tempsPasse(){
		return this.parentView.getModel().getArene().getTimer().getElapsedTime()/60+":"+this.parentView.getModel().getArene().getTimer().getElapsedTime()%60;
	}
	
	private String tempsLimiteToString(int temps){
		if(temps==0) return "Free";
		else return (temps/60+":"+temps%60);
	}
}
